|
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ОТДЕЛ ИзФайла+;
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(* НАЗНАЧЕНИЕ: пример упорядочивания чисел из внешнего файла быстрым обменом *)
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ИСПОЛЬЗУЕТ
ОбменомБ,
Параметр ИЗ "...\Отделы\Обмен\",
Читать ИЗ "...\Отделы\Обмен\",
Писать ИЗ "...\Отделы\Обмен\",
Вывод ИЗ "...\Отделы\Обмен\";
(*────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Ошибка1(ц-:ЦЕПЬ);
УКАЗ
Вывод.Цепь(ц);
Вывод.Цепь("^Вызов:^ИзФайла.exe имяВходногоФайла имяВыходногоФайла");
СТОП(1)
КОН Ошибка1;
(*────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Ошибка2(ц1-,ц2-:ЦЕПЬ);
УКАЗ
Вывод.Цепь(ц1);
Ошибка1(ц2)
КОН Ошибка2;
(*────────────────────────────────────────────────────────────────────────────*)
ЗАДАЧА Упорядочивание;
ПЕР
ряд:ДОСТУП К РЯД ИЗ ЦЕЛ; (* обрабатываемый ряд *)
потокЧтения:Читать.Поток; (* поток для входного неупорядоченного ряда чисел *)
потокЗаписи:Писать.Поток; (* поток для выходного упорядоченного ряда чисел *)
чисел:ЦЕЛ; (* чисел во входном файле *)
имяФайла:ЦЕПЬ[100];
число:ЦЕЛ;
УКАЗ
(* проверка параметров приложения *)
ЕСЛИ Параметр.всего <= 1 ТО Ошибка1("Нет имени входного файла.") КОН;
ЕСЛИ Параметр.всего <= 2 ТО Ошибка1("Нет имени выходного файла.") КОН;
(* подсчёт чисел во входном файле *)
Параметр.Текст(1,имяФайла);
потокЧтения:=Читать.Открыть(имяФайла);
ЕСЛИ потокЧтения = ПУСТО ТО
Ошибка2(имяФайла," не найден.")
КОН;
потокЧтения.видЗнаков:=Читать.знУни;
чисел:=0;
ПОКА НЕ Читать.Конец(потокЧтения) ВЫП
число:=Читать.Цел(потокЧтения);
УВЕЛИЧИТЬ(чисел)
КОН;
Читать.Закрыть(потокЧтения);
(* распределение памяти под ряд чисел *)
СОЗДАТЬ(ряд,чисел);
(* чтение ряда *)
Параметр.Текст(1,имяФайла);
потокЧтения:=Читать.Открыть(имяФайла);
потокЧтения.видЗнаков:=Читать.знУни;
ОТ число:=0 ДО чисел-1 ВЫП
ряд[число]:=Читать.Цел(потокЧтения)
КОН;
Читать.Закрыть(потокЧтения);
(* упорядочивание ряда быстрым обменом *)
ОбменомБ.Упорядочить(ряд^);
(* запись ряда *)
Параметр.Текст(2,имяФайла);
потокЗаписи:=Писать.Открыть(имяФайла);
ЕСЛИ потокЗаписи = ПУСТО ТО
Ошибка2(имяФайла," не открывается.")
КОН;
потокЗаписи.видЗнаков:=Писать.знУни;
ОТ число:=0 ДО чисел-1 ВЫП
Писать.ЧЦел(потокЗаписи,"%d^",ряд[число],0,0,0)
КОН;
Писать.Закрыть(потокЗаписи)
КОН Упорядочивание;
(*────────────────────────────────────────────────────────────────────────────*)
УКАЗ
Упорядочивание
КОН ИзФайла.
▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
|
|